#ifndef PHYSICALPROPERTIESDATA_H_
#define PHYSICALPROPERTIESDATA_H_

#include "MeshData.h"

namespace PRS		// PRS: Petroleum Reservoir Simulator
{
	/**
	 * PhysicPropData class provides methods to set/get physical properties such as pressure, saturation and their respective gradients as well
	 * as rock-fluid properties (fractional flow and total mobilities). Fluid velocity is also managed by this class. All properties are associated
	 * to amesh entity (node or edge) through the class AttachData that is in charge of store all data (physical, numeric, geometric,...) to mesh entities.
	 */
	class PhysicPropData{
	public:
		PhysicPropData();
		~PhysicPropData();

		void initialize(MeshData *, SimulatorParameters *, TMesh* pTMesh_data);
		void setInitialSaturation(TMesh* pTMesh_data, SimulatorParameters *simPar);
		void initializePressureGradient(TMesh* pTMesh_data);
	 	void calculateTotalMobility(TMesh* pTMesh_data);
	 	double getFractionalFlux(const double&);
	 	double getOilFractionalFlux(const double &);
	 	double get_ksw(const double&);
	 	double get_kso(const double&);

	private:
		double Swr;		// Irreducible water saturation
		double Sor;		// Residual oil saturation
		double mi_w;	// water viscosity
		double mi_o;	// oil viscosity
		int ksModel;

	};
}
#endif /*PHYSICALPROPERTIESDATA_H_*/
